﻿#region License statement
// NJamb, a specification and delta-specification DSL
// Copyright (c) 2010-2011, Mark Knell
// Published under the MIT License; all other rights reserved
#endregion

#region using...
using NJamb.Parser.SpecificationBuilders;
using NJamb.Parser.SpecificationBuilders.Delta;
using NJamb.Specifications.Delta;
using Stile.Patterns.SelfDescribingPredicates;
#endregion

namespace NJamb.Specifications.Simple
{
    public interface ISimpleSpecification<out TSubject> : ISpecification<TSubject, ICollaboratingSimpleSpecification<TSubject>> {}

    public interface ISimpleSpecification<out TSubject, out TDeltaSpecificationBuilder, out TEvaluation> :
        ISimpleSpecification<TSubject>,
        IEvaluable<TEvaluation>
        where TDeltaSpecificationBuilder : class, ICanThrow<IDeltaSpecification>
        where TEvaluation : IEvaluation
    {
        TDeltaSpecificationBuilder AndLater { get; }
    }

    public interface ISimpleSpecification<out TSubject, out TDeltaSpecificationBuilder> :
        ISimpleSpecification<TSubject, TDeltaSpecificationBuilder, IEvaluation<TSubject>>
        where TDeltaSpecificationBuilder : class, IDeltaSpecificationBuilder {}
}
